package main

import (
	"fmt"
	"os"
)

// Author : CSR丶WARRIOR
// Time ： 2020/10/15  19:40
// TOOLS : GoLand
// FILENAME : index.go
// STATEMENT: 通讯录

//联系人结构体
type ContactPerson struct {
	name        string
	phoneNumber map[string]string
}

var personList = make([]ContactPerson, 0)

func main() {
	initData()
	for {
		chooseFunction()
	}

}
func chooseFunction() {
	showMenu()
	var input int
	fmt.Scan(&input)
	switchType(input)
}

func showMenu() {
	fmt.Println("--------请选择对应功能-------")
	fmt.Println("--------1.添加联系人--------")
	fmt.Println("--------2.删除联系人--------")
	fmt.Println("--------3.查询联系人--------")
	fmt.Println("--------4.编辑联系人--------")
	fmt.Println("-----5.显示所有联系人信息---—--")
	fmt.Println("--------6.退出系统---------")
	fmt.Println("--------------------------")
}

func switchType(n int) {
	switch n {
	case 1:
		fmt.Println("添加联系人")
		addPerson()
	case 2:
		fmt.Println("删除联系人")
		deletePerson()
	case 3:
		fmt.Println("查询联系人")
		getPersonByName()
	case 4:
		fmt.Println("编辑联系人")
		editPerson()
	case 5:
		showPersonList()
	case 6:
		fmt.Println("确定要退出吗,y退出")
		var input string
		fmt.Scan(&input)
		if input == "y" {
			os.Exit(0)
		}
	}
}

func addPerson() {
	fmt.Println("请输入电话姓名")
	var name string
	var telType string
	var phoneMap = make(map[string]string)
	var telNum string
	fmt.Scan(&name)
	for {
		fmt.Println("请输入电话号码类型")
		fmt.Scan(&telType)
		fmt.Println("请输入电话号码")
		fmt.Scan(&telNum)
		phoneMap[telType] = telNum
		var input string
		fmt.Println("如果结束录入,请按q!")
		fmt.Scan(&input)
		if input == "q" {
			break
		}
	}
	var p = ContactPerson{
		name:        name,
		phoneNumber: phoneMap,
	}
	personList = append(personList, p)
	fmt.Println("添加成功")
	showPersonList()
}

func initData() {
	telMap := make(map[string]string)
	telMap["home"] = "1334"
	telMap["school"] = "911"
	p := ContactPerson{
		name:        "小红",
		phoneNumber: telMap,
	}
	personList = append(personList, p)
}

func getPersonByName() *ContactPerson {
	var name string
	fmt.Println("请输入要查询认的姓名")
	fmt.Scan(&name)
	var index = -1
	for k, value := range personList {
		if value.name == name {
			index = k
			fmt.Println("姓名：", value.name)
			for k, v := range value.phoneNumber {
				fmt.Printf("电话类型：%s  电话号码：%s\n", k, v)
			}
			break
		}

	}
	if index == -1 {
		fmt.Println("查无此人")
		return nil
	} else {
		return &personList[index]
	}
}
func showPersonList() {
	if len(personList) == 0 {
		fmt.Println("暂无数据")
		return
	}
	for _, v := range personList {
		fmt.Println("姓名：", v.name)
		for k, v1 := range v.phoneNumber {
			fmt.Println("电话类型：", k)
			fmt.Println("电话号码:", v1)
		}
	}
}

func deletePerson() {
	fmt.Println("请输入要删除联系人的姓名")
	var name string
	fmt.Scan(&name)
	//遍历切片，找到联系人
	var index = -1
	for i := 0; i < len(personList); i++ {
		if personList[i].name == name {
			index = i
			break
		}
	}
	if index == -1 {
		fmt.Println("查无此人")
	} else {
		personList = append(personList[:index], personList[index+1:]...)
	}
	showPersonList()
}

func editPerson() {
	var p = getPersonByName()
	var menu = make([]string, 0) //保存电话类型
	if p != nil {
		var name string
		//修改电话
		for {
			fmt.Println("编辑用户名称请按1,编辑电话请按2，退出请按3")
			var exitFlag = false
			var input int
			fmt.Scan(&input)
			switch input {
			case 1:
				//修改联系人的姓名
				fmt.Println("请输入新的姓名")
				fmt.Scan(&name)
				p.name = name
			case 2:
				//展示电话信息
				var j int
				for i, i2 := range p.phoneNumber {
					fmt.Println("编辑(", i, ")", i2, "请按：", j)
					menu = append(menu, i)
					j++
				}
				var choice int
				fmt.Println("请输入要编辑号码的类型")
				fmt.Scan(&choice)
				//遍历menu
				for k, v := range menu {
					if k == choice {
						//修改v
						var newNum string
						fmt.Println("请输入新的电话号码")
						fmt.Scan(&newNum)
						//更新map
						p.phoneNumber[v] = newNum
					}
				}
			case 3:
				exitFlag = true
			}
			if exitFlag == true {
				break
			}
		}
	} else {
		fmt.Println("没有找到要编辑联系人的信息")
	}
}
